package design_pattern.lx1_factory_pattern;

import design_pattern.lx1_factory_pattern.impl.Circle;
import design_pattern.lx1_factory_pattern.impl.Rectangle;
import design_pattern.lx1_factory_pattern.impl.Square;

/**
 * @Author Mr.wang
 * @Description 工厂类
 * 工厂模式：属于创建型模式，提供了一种创建对象的最佳方式；
 * 意图：定义一个创建对象的接口，让其子类自己决定实例化哪一个工厂类，工厂模式时期创建过程延迟到子类进行
 * 主要解决：主要解决接口选择的问题
 * 使用场景：1.日志记录器：可能记录到本地硬盘、系统时间、远程服务器等，用户可以选择记录到什么地方；
 * 2.数据库访问：当用户不知道最后系统采用那一类数据库，以及数据库可能有变化时；
 * 3. 设计一个连接服务器的框架，需要三个协议，‘POP3’、‘IMAP’，‘HTTP’，可以把这三个作为产品类，共同实现一个接口
 * @Date 2020-04-01
 */
public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        }
        if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }
        if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        }
        return null;
    }
}
